package it.mauriziobasile.dietarapida;

import it.mauriziobasile.dietarapida.gui.DietaRapidaView;

import java.util.Hashtable;
import java.util.Iterator;

/**
 *
 * @author Maurizio Basile
 */
public class Dieta {

    private static final long serialVersionUID = -4982050694100925373L;
    public static int COLAZIONE = 0;
    public static int SPUNTINO = 1;
    public static int PRANZO = 2;
    public static int MERENDA = 3;
    public static int CENA = 4;
    public static int SELEZIONE = 5;
    private Hashtable<Integer, Porzione> pasti;
    private int progressivo;
    private boolean empty;
    private DietaRapidaView.DietaChangedAction dchanged;

    public Dieta() {
        progressivo = 0;
        pasti = new Hashtable<Integer, Porzione>();
    }

    public void setChangeListener(DietaRapidaView.DietaChangedAction sd) {
        dchanged = sd;
    }

    public Porzione getPorzione(Integer porzId){
        return pasti.get(porzId);
    }

    public void modPorzione(Integer porzID, double newval) {
        pasti.get(porzID).setQuantita(newval);
        if (dchanged != null) {
            dchanged.changed();
        }
    }

    public int addToPasto(int pasto, Alimento alim, double quant) {
        Porzione p = new Porzione(alim, quant, pasto);
        return addToPasto(p);
    }

    public void removeFromPasto(Integer porzID) {
        pasti.remove(porzID);
        if (dchanged != null) {
            dchanged.changed();
        }
    }

    public int addToPasto(Porzione porz) {
        int tmp = progressivo;
        progressivo++;
        pasti.put(new Integer(tmp), porz);
        empty = false;
        if (dchanged != null) {
            dchanged.changed();
        }
        return tmp;
    }

    public Hashtable<Integer, Porzione> getPasto(int pasto) {
        Hashtable<Integer, Porzione> tmp = new Hashtable<Integer, Porzione>();
        Iterator<Integer> it = pasti.keySet().iterator();
        while (it.hasNext()) {
            Integer kkk = it.next();
            if (pasti.get(kkk).getPasto() == pasto) {
                tmp.put(kkk, pasti.get(kkk));
            }
        }
        return tmp;
    }

    public boolean isEmpty() {
        return empty;
    }

    public static String id2Pasto(int id) {
        switch (id) {
            case 0:
                return "Colazione";
            case 1:
                return "Spuntino";
            case 2:
                return "Pranzo";
            case 3:
                return "Merenda";
            case 4:
                return "Cena";
            default:
                ;
        }
        return "Non trovato";
    }

    public static int pasto2Id(String pasto) {
        switch (pasto.toLowerCase().hashCode()) {
            case 1588138646:
                return COLAZIONE;
            case -980221660:
                return PRANZO;
            case -1664319060:
                return SPUNTINO;
            case 953596864:
                return MERENDA;
            case 3049877:
                return CENA;
            default:
                ;
                return 0;
        }
    }

    public double getTotal(String nut) {
        double ctot = 0.0;
        Iterator<Porzione> it = pasti.values().iterator();
        while (it.hasNext()) {
            Porzione pp = it.next();
            try {
                ctot = ctot + Double.parseDouble(pp.getAlimento().get(nut)) * pp.getQuantita() / 100.0;
            } catch (NumberFormatException e) {
            }
        }

        return ctot;
    }
}
